﻿using QuanLyGiaoVuDAL.Repositories.DatabaseRepositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace QuanLyGiaoVuService.CommonServices
{
    public class TietHocService : ITietHocService
    {
        public ITietHocRepository _tietHocRepository;

        public TietHocService(ITietHocRepository tietHocRepository)
        {
            _tietHocRepository = tietHocRepository;
        }

        public bool DeleteTietHoc(int maTietHoc)
        {
            return _tietHocRepository.DeleteTietHoc(maTietHoc);
        }

        public IEnumerable<QuanLyGiaoVuDAL.DTO.TietHocDTO> GetAllTietHoc(int? tiet, int? ca, bool? buoi)
        {
            return _tietHocRepository.GetAllTietHoc(tiet, ca, buoi);
        }

        public QuanLyGiaoVuDAL.DTO.TietHocDTO GetTietHocByMaTietHoc(int maTietHoc)
        {
            return _tietHocRepository.GetTietHocByMaTietHoc(maTietHoc);
        }

        public QuanLyGiaoVuDAL.DTO.TietHocDTO InsertTietHoc(QuanLyGiaoVuDAL.DTO.TietHocDTO tietHocDTO)
        {
            return _tietHocRepository.InsertTietHoc(tietHocDTO);
        }

        public QuanLyGiaoVuDAL.DTO.TietHocDTO UpdateTietHoc(QuanLyGiaoVuDAL.DTO.TietHocDTO tietHocDTO)
        {
            return _tietHocRepository.UpdateTietHoc(tietHocDTO);
        }


        public void LayTietHocTheoBuoi(bool buoi, out QuanLyGiaoVuDAL.DTO.TietHocDTO tietDau, out QuanLyGiaoVuDAL.DTO.TietHocDTO tietSau)
        {
            var tietHocList = _tietHocRepository.GetAllTietHoc(null, null, buoi).OrderBy(tietHoc => tietHoc.TietThu).ToArray();
            if (tietHocList[0] != null)
                tietDau = tietHocList[0];
            else
                tietDau = null;
            if (tietHocList.Length > 0)
                tietSau = tietHocList[tietHocList.Length - 1];
            else
                tietSau = null;
        }

        public void LayTietHocTheoCa(int ca, out QuanLyGiaoVuDAL.DTO.TietHocDTO tietDau, out QuanLyGiaoVuDAL.DTO.TietHocDTO tietSau)
        {
            var tietHocList = _tietHocRepository.GetAllTietHoc(null, ca, null).OrderBy(tietHoc => tietHoc.TietThu).ToArray();
            if (tietHocList[0] != null)
                tietDau = tietHocList[0];
            else tietDau = null;
            if (tietHocList.Length > 0)
                tietSau = tietHocList[tietHocList.Length - 1];
            else tietSau = null;
        }

        public IEnumerable<int> GetAllCa()
        {
            return _tietHocRepository.GetAllCa();
        }

        public int GetThuTuTietTrongTuan(int thu, int tietThu)
        {
            var danhSachTietHoc = _tietHocRepository.GetAllTietHoc(null, null, null);
            int soTiet = 0;
            if (danhSachTietHoc.Count() > 0)
            {
                soTiet = danhSachTietHoc.Max(tiet => tiet.TietThu);
            }
            return ((thu - 2) * soTiet + tietThu);
        }

        public int GetSoTietTrongNgay()
        {
            var danhSachTietHoc = _tietHocRepository.GetAllTietHoc(null, null, null);
            int soTiet = 0;
            if (danhSachTietHoc.Count() > 0)
            {
                soTiet = danhSachTietHoc.Max(tiet => tiet.TietThu);
            }
            return soTiet;
        }
    }
}
